// 引入Vue
import Vue from "vue";
import VueRouter from 'vue-router'
import routes from "./routes";
import store from '@/store'

//解决路由编程式导航控制台报错问题vue-router.esm.js?3423:2046 Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: "/search".
//先把VueRouter原型对象的push保存一份
const originPush = VueRouter.prototype.push
//重写push方法 
VueRouter.prototype.push = function (location, resolve, reject) {
  //调用保存的push方法
  //但是保存的push方法是挂载在window的方法 所以要通过call修改this的指向
  if (resolve && reject) {
    originPush.call(this, location, resolve, reject);
  } else {
    originPush.call(this, location, () => { }, () => { });
  }
}


// 使用Vue-Router
Vue.use(VueRouter)
// 配置路由
let router = new VueRouter({
  //配置路由路径
  routes,
  scrollBehavior(to, from, savedPosition) {
    // return 期望滚动到哪个的位置
    // 放回的y等于0，代表滚动条再最上方
    return { y: 0 }
  }
})

// 全局守卫：前置守卫(在路由跳转之前进行判断)
router.beforeEach(async (to, from, next) => {
  // to:可以获取到你要跳转到那个路由信息
  // from： 可以获取到你从哪个路由而来的信息
  // next： 放行函数 next()放行 next(path)放行到指定路由 next(false)
  // console.log(to);
  // console.log(from);

  // 用户登录了，才会有token，未登录一定不会有token
  let token = store.state.user.token;

  // 用户信息
  // 不能拿userinfo去判断，因为userinfo是一个对象，空对象也是为真
  let name = store.state.user.userInfo.name;
  if (token) {
    // 判断他要去的是不是login
    if (to.path == '/login' || to.path == '/register') {
      // 如果是，让他不能去，让他停留到首页，因为用户已经登录了，不能回到登录页
      // 这里也可以是next('/')，代表重定向的指示位置
      next('/home')
    } else {
      // 登录了，但去的不是login,登录的时候去的不是login，所以可以放行
      // console.log(6666);
      // next();
      if (name) {
        next();
        console.log('已经有了用户信息');
      } else {
        // 没有用户信息
        // 获取用户信息在首页展示
        try {
          // 获取用户信息成功
          await store.dispatch('getUserInfo')
          console.log("获取用户信息成功");
          next();
        } catch (error) {
          // token失效了获取不到用户的信息，从新登录
          // 清除token
          await store.dispatch('userLogout')
          next('/login')
        }
      }
    }

  } else {
    // 未登录暂时没有处理完毕，先这个样子后期在处理
    next();
    console.log("未登录");
  }

})

export default router;